
import { atom, selector } from "recoil";
import { getUserInfo } from "zmp-sdk";
import type { UserInfo } from './api/types';
import type { UserCenterData } from './api/types';

export const userState = selector({
  key: "user",
  get: () =>
    getUserInfo({
      avatarType: "normal",
    }),
});

export const displayNameState = atom({
  key: "displayName",
  default: "",
});

// 从localStorage获取token的辅助函数
const getStoredToken = (): string | null => {
  try {
    const token = localStorage.getItem('authToken');
    console.log('从localStorage读取token:', token ? '已找到token' : '未找到token');
    return token;
  } catch (error) {
    console.warn('无法从localStorage读取token:', error);
    return null;
  }
};

// 保存token到localStorage的辅助函数
const setStoredToken = (token: string | null): void => {
  try {
    if (token) {
      localStorage.setItem('authToken', token);
      console.log('token已保存到localStorage');
    } else {
      localStorage.removeItem('authToken');
      console.log('token已从localStorage清除');
    }
  } catch (error) {
    console.warn('无法保存token到localStorage:', error);
  }
};

export const authTokenState = atom<string | null>({
  key: 'authToken',
  default: 'test123', // TODO: 记得注释掉这个硬编码token
  effects: [
    // 当token状态改变时，同步到localStorage
    ({ onSet }) => {
      onSet((newValue) => {
        setStoredToken(newValue);
      });
    }
  ]
});

export const currentUserState = atom<UserInfo | null>({
  key: 'currentUser',
  default: null,
});

// 用户中心数据状态管理
export const userCenterDataState = atom<UserCenterData | null>({
  key: 'userCenterData',
  default: null,
});

// 用户中心数据加载状态
export const userCenterDataLoadingState = atom<boolean>({
  key: 'userCenterDataLoading',
  default: false,
});

// 用户中心数据错误状态
export const userCenterDataErrorState = atom<string | null>({
  key: 'userCenterDataError',
  default: null,
});

export const selectedCountryCodeState = atom<string>({
  key: 'selectedCountryCode',
  default: '84', // 默认越南区号
});

// 登录页面状态管理
export const loginPageState = atom<{
  pageType: 1 | 2 | 3;
  loginType: 0 | 6;
  agree: boolean;
}>({
  key: 'loginPageState',
  default: {
    pageType: 1,
    loginType: 0,
    agree: false
  }
});

// 获取用户中心数据的辅助函数 - 简化版本，只使用V2接口
export const fetchUserCenterData = async (
  setUserCenterData: (data: UserCenterData | null) => void, 
  setLoading: (loading: boolean) => void,
  setError?: (error: string | null) => void
) => {
  try {
    setLoading(true);
    const { userCenterApi } = await import('./api/login');
    
    // 只使用 V2 接口获取用户数据
    const response = await userCenterApi.getUserCenterData();
    
    if (response?.user) {
      // 只存储user数据
      const userCenterData: UserCenterData = {
        user: response.user
      };
      setUserCenterData(userCenterData);
      console.log('用户中心数据获取成功 (V2):', userCenterData);
    } else {
      setUserCenterData(null);
      setError?.('用户数据为空');
      console.error('用户数据为空');
    }
    
  } catch (error) {
    console.error('获取用户中心数据失败:', error);
    setUserCenterData(null);
    setError?.(error instanceof Error ? error.message : '获取用户中心数据失败');
  } finally {
    setLoading(false);
  }
};

// 登出功能：清除所有认证相关的数据
export const logout = () => {
  try {
    // 清除localStorage中的token
    localStorage.removeItem('authToken');
    // 清除引导页缓存（可选，根据需要决定）
    // localStorage.removeItem('introSeen');
    console.log('登出成功，已清除本地认证数据');
  } catch (error) {
    console.warn('登出时清除数据失败:', error);
  }
};

